import re

# 匹配所有符合正则的内容，返回 list，效率较低
print("----------------findall: 匹配所有符合正则的内容，返回 list，效率较低----------------")
lst = re.findall(r"\d+", "电话是:10086, 10010")
print(lst)

# 匹配所有符合正则的内容，返回 iter，效率较高
print("----------------finditer: 匹配所有符合正则的内容，返回 iter，效率较高----------------")
it = re.finditer(r"\d+", "电话是:10086, 10010")
for item in it:
    print(item.group())

# 匹配第一个符合正则的内容，返回 matcher
print("----------------search: 匹配第一个符合正则的内容，返回 matcher----------------")
s = re.search(r"\d+", "电话是:10086, 10010")
print(s.group())

# 从头开始匹配第一个符合正则的内容，返回 matcher
print("----------------match: 从头开始匹配第一个符合正则的内容，返回 matcher----------------")
s = re.match(r"\d+", "10086, 电话是:10010")
print(s.group())

# 预加载正则表达式，适用于复杂正则表达式的多次使用
print("----------------compile: 预加载正则表达式，适用于复杂正则表达式的多次使用----------------")
rule = re.compile(r"\d+")
it = rule.finditer("电话是:10086, 10010")
for item in it:
    print(item.group())

# 解析 html 实例
print("----------------解析 html 实例----------------")
s = """
<div class='jay1'><span id='1'>周杰伦55555</span></div>
<div class='jay22'><span id='2'>周杰伦4444</span></div>
<div class='jay333'><span id='3'>周杰伦333</span></div>
<div class='jay4444'><span id='4'>周杰伦22</span></div>
<div class='jay55555'><span id='5'>周杰伦1</span></div>
"""
# re.S: 让 . 能匹配换行符
# (?P<分组名称>正则表达式): 可以根据 .group(分组名称) 获取具体内容
rule = re.compile(r"<div class='(?P<class>.*?)'><span id='(?P<id>\d+)'>(?P<spanText>.*?)</span></div>", re.S)
it = rule.finditer(s)
for item in it:
    print(item.group())
    print(item.group("class"), item.group("id"), item.group("spanText"))